<!DOCTYPE html>
<!-- saved from url=(0127)https://docs.google.com/document/d/e/2PACX-1vRVEHQyqUAOR3f0i_b99huuR783PARUBex3S1RZYLAWrCHc0wHfseVFlhiK9r4QXH0NUs7ww8EF4627/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerfWG call - January 30th 2020</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #header {
        align-items: center;
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        height: 60px;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #header #title {
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #header #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #header {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #header #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #header #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="header"><div id="title">WebPerfWG call - January 30th 2020</div><div id="interval"><span></span></div></div><div id="contents"><style type="text/css">.lst-kix_a06df9q7o4na-8>li:before{content:"\0025a0  "}.lst-kix_a06df9q7o4na-7>li:before{content:"\0025cb  "}.lst-kix_2ap6y5ebuigb-2>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-2}.lst-kix_a06df9q7o4na-1>li:before{content:"\0025cb  "}.lst-kix_2ap6y5ebuigb-3>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-3}.lst-kix_a06df9q7o4na-0>li:before{content:"\0025cf  "}.lst-kix_n9nxbz2zi20x-7>li:before{content:"\0025cb  "}.lst-kix_n9nxbz2zi20x-8>li:before{content:"\0025a0  "}.lst-kix_n9nxbz2zi20x-6>li:before{content:"\0025cf  "}.lst-kix_n9nxbz2zi20x-3>li:before{content:"\0025cf  "}.lst-kix_n9nxbz2zi20x-4>li:before{content:"\0025cb  "}ol.lst-kix_2ap6y5ebuigb-5.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-5 0}.lst-kix_n9nxbz2zi20x-5>li:before{content:"\0025a0  "}.lst-kix_n9nxbz2zi20x-0>li:before{content:"\0025cf  "}ul.lst-kix_n9nxbz2zi20x-0{list-style-type:none}.lst-kix_a06df9q7o4na-2>li:before{content:"\0025a0  "}ul.lst-kix_n9nxbz2zi20x-1{list-style-type:none}ul.lst-kix_n9nxbz2zi20x-2{list-style-type:none}.lst-kix_a06df9q7o4na-3>li:before{content:"\0025cf  "}.lst-kix_n9nxbz2zi20x-2>li:before{content:"\0025a0  "}ul.lst-kix_n9nxbz2zi20x-7{list-style-type:none}ul.lst-kix_n9nxbz2zi20x-8{list-style-type:none}.lst-kix_a06df9q7o4na-4>li:before{content:"\0025cb  "}.lst-kix_a06df9q7o4na-6>li:before{content:"\0025cf  "}ul.lst-kix_n9nxbz2zi20x-3{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-2.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-2 0}.lst-kix_n9nxbz2zi20x-1>li:before{content:"\0025cb  "}ul.lst-kix_n9nxbz2zi20x-4{list-style-type:none}ul.lst-kix_n9nxbz2zi20x-5{list-style-type:none}.lst-kix_a06df9q7o4na-5>li:before{content:"\0025a0  "}ul.lst-kix_n9nxbz2zi20x-6{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-1.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-1 0}.lst-kix_g16eo3dqfihp-2>li:before{content:"\0025a0  "}.lst-kix_g16eo3dqfihp-3>li:before{content:"\0025cf  "}ol.lst-kix_2ap6y5ebuigb-8.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-8 0}.lst-kix_g16eo3dqfihp-0>li:before{content:"\0025cf  "}.lst-kix_g16eo3dqfihp-1>li:before{content:"\0025cb  "}.lst-kix_g16eo3dqfihp-4>li:before{content:"\0025cb  "}.lst-kix_g16eo3dqfihp-5>li:before{content:"\0025a0  "}.lst-kix_u79uveo9f04x-8>li:before{content:"\0025a0  "}.lst-kix_u79uveo9f04x-5>li:before{content:"\0025a0  "}.lst-kix_u79uveo9f04x-7>li:before{content:"\0025cb  "}.lst-kix_u79uveo9f04x-6>li:before{content:"\0025cf  "}.lst-kix_u79uveo9f04x-1>li:before{content:"\0025cb  "}.lst-kix_u79uveo9f04x-3>li:before{content:"\0025cf  "}.lst-kix_g16eo3dqfihp-8>li:before{content:"\0025a0  "}.lst-kix_u79uveo9f04x-0>li:before{content:"\0025cf  "}.lst-kix_u79uveo9f04x-4>li:before{content:"\0025cb  "}.lst-kix_g16eo3dqfihp-6>li:before{content:"\0025cf  "}.lst-kix_g16eo3dqfihp-7>li:before{content:"\0025cb  "}.lst-kix_u79uveo9f04x-2>li:before{content:"\0025a0  "}ol.lst-kix_2ap6y5ebuigb-7.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-7 0}ul.lst-kix_u79uveo9f04x-3{list-style-type:none}ul.lst-kix_dse4f614g7zl-6{list-style-type:none}.lst-kix_2ap6y5ebuigb-1>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-1}.lst-kix_2ap6y5ebuigb-4>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-4}ul.lst-kix_u79uveo9f04x-2{list-style-type:none}ul.lst-kix_dse4f614g7zl-7{list-style-type:none}ul.lst-kix_u79uveo9f04x-1{list-style-type:none}ul.lst-kix_dse4f614g7zl-8{list-style-type:none}ul.lst-kix_u79uveo9f04x-0{list-style-type:none}ul.lst-kix_u79uveo9f04x-7{list-style-type:none}ul.lst-kix_dse4f614g7zl-2{list-style-type:none}.lst-kix_2ap6y5ebuigb-7>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-7}ul.lst-kix_u79uveo9f04x-6{list-style-type:none}ul.lst-kix_dse4f614g7zl-3{list-style-type:none}ul.lst-kix_u79uveo9f04x-5{list-style-type:none}ul.lst-kix_a06df9q7o4na-8{list-style-type:none}ul.lst-kix_dse4f614g7zl-4{list-style-type:none}ul.lst-kix_u79uveo9f04x-4{list-style-type:none}ul.lst-kix_a06df9q7o4na-7{list-style-type:none}.lst-kix_dse4f614g7zl-1>li:before{content:"\0025cb  "}ul.lst-kix_dse4f614g7zl-5{list-style-type:none}ul.lst-kix_a06df9q7o4na-6{list-style-type:none}ul.lst-kix_a06df9q7o4na-5{list-style-type:none}ul.lst-kix_a06df9q7o4na-4{list-style-type:none}ul.lst-kix_dse4f614g7zl-0{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-0.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-0 0}ul.lst-kix_u79uveo9f04x-8{list-style-type:none}ul.lst-kix_a06df9q7o4na-3{list-style-type:none}.lst-kix_dse4f614g7zl-0>li:before{content:"\0025cf  "}ul.lst-kix_dse4f614g7zl-1{list-style-type:none}ul.lst-kix_a06df9q7o4na-2{list-style-type:none}ul.lst-kix_a06df9q7o4na-1{list-style-type:none}ul.lst-kix_a06df9q7o4na-0{list-style-type:none}.lst-kix_dse4f614g7zl-3>li:before{content:"\0025cf  "}.lst-kix_dse4f614g7zl-5>li:before{content:"\0025a0  "}.lst-kix_dse4f614g7zl-2>li:before{content:"\0025a0  "}.lst-kix_dse4f614g7zl-6>li:before{content:"\0025cf  "}.lst-kix_dse4f614g7zl-4>li:before{content:"\0025cb  "}.lst-kix_2ap6y5ebuigb-8>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-8}.lst-kix_ruhsp3ekeep-6>li:before{content:"\0025cf  "}.lst-kix_ruhsp3ekeep-7>li:before{content:"\0025cb  "}.lst-kix_dse4f614g7zl-7>li:before{content:"\0025cb  "}.lst-kix_ruhsp3ekeep-8>li:before{content:"\0025a0  "}.lst-kix_dse4f614g7zl-8>li:before{content:"\0025a0  "}.lst-kix_2ap6y5ebuigb-0>li:before{content:"" counter(lst-ctn-kix_2ap6y5ebuigb-0,decimal) ") "}.lst-kix_2ap6y5ebuigb-1>li:before{content:"" counter(lst-ctn-kix_2ap6y5ebuigb-1,lower-latin) ") "}ol.lst-kix_2ap6y5ebuigb-3.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-3 0}ol.lst-kix_2ap6y5ebuigb-6.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-6 0}.lst-kix_2ap6y5ebuigb-8>li:before{content:"" counter(lst-ctn-kix_2ap6y5ebuigb-8,lower-roman) ". "}.lst-kix_2ap6y5ebuigb-7>li:before{content:"" counter(lst-ctn-kix_2ap6y5ebuigb-7,lower-latin) ". "}.lst-kix_2ap6y5ebuigb-2>li:before{content:"" counter(lst-ctn-kix_2ap6y5ebuigb-2,lower-roman) ") "}.lst-kix_ruhsp3ekeep-0>li:before{content:"\0025cf  "}.lst-kix_ruhsp3ekeep-2>li:before{content:"\0025a0  "}.lst-kix_ruhsp3ekeep-3>li:before{content:"\0025cf  "}ol.lst-kix_2ap6y5ebuigb-1{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-0{list-style-type:none}.lst-kix_2ap6y5ebuigb-3>li:before{content:"(" counter(lst-ctn-kix_2ap6y5ebuigb-3,decimal) ") "}.lst-kix_ruhsp3ekeep-1>li:before{content:"\0025cb  "}.lst-kix_ruhsp3ekeep-5>li:before{content:"\0025a0  "}ol.lst-kix_2ap6y5ebuigb-7{list-style-type:none}.lst-kix_2ap6y5ebuigb-4>li:before{content:"(" counter(lst-ctn-kix_2ap6y5ebuigb-4,lower-latin) ") "}.lst-kix_2ap6y5ebuigb-5>li:before{content:"(" counter(lst-ctn-kix_2ap6y5ebuigb-5,lower-roman) ") "}ol.lst-kix_2ap6y5ebuigb-6{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-8{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-3{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-2{list-style-type:none}.lst-kix_2ap6y5ebuigb-6>li:before{content:"" counter(lst-ctn-kix_2ap6y5ebuigb-6,decimal) ". "}.lst-kix_ruhsp3ekeep-4>li:before{content:"\0025cb  "}ol.lst-kix_2ap6y5ebuigb-5{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-4{list-style-type:none}ul.lst-kix_ruhsp3ekeep-0{list-style-type:none}ul.lst-kix_ruhsp3ekeep-1{list-style-type:none}ul.lst-kix_ruhsp3ekeep-2{list-style-type:none}ul.lst-kix_ruhsp3ekeep-3{list-style-type:none}ul.lst-kix_ruhsp3ekeep-4{list-style-type:none}.lst-kix_2ap6y5ebuigb-5>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-5}ul.lst-kix_ruhsp3ekeep-5{list-style-type:none}ul.lst-kix_ruhsp3ekeep-6{list-style-type:none}ul.lst-kix_ruhsp3ekeep-7{list-style-type:none}ul.lst-kix_ruhsp3ekeep-8{list-style-type:none}.lst-kix_2ap6y5ebuigb-6>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-6}.lst-kix_2ap6y5ebuigb-0>li{counter-increment:lst-ctn-kix_2ap6y5ebuigb-0}ul.lst-kix_g16eo3dqfihp-6{list-style-type:none}ul.lst-kix_g16eo3dqfihp-7{list-style-type:none}ul.lst-kix_g16eo3dqfihp-4{list-style-type:none}ul.lst-kix_g16eo3dqfihp-5{list-style-type:none}ul.lst-kix_g16eo3dqfihp-8{list-style-type:none}ul.lst-kix_g16eo3dqfihp-2{list-style-type:none}ul.lst-kix_g16eo3dqfihp-3{list-style-type:none}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}ul.lst-kix_g16eo3dqfihp-0{list-style-type:none}ul.lst-kix_g16eo3dqfihp-1{list-style-type:none}ol.lst-kix_2ap6y5ebuigb-4.start{counter-reset:lst-ctn-kix_2ap6y5ebuigb-4 0}ol{margin:0;padding:0}table td,table th{padding:0}.c8{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c0{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c4{color:#434343;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:14pt;font-family:"Arial";font-style:normal}.c9{padding-top:16pt;padding-bottom:4pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c10{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c11{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c5{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c1{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c3{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c14{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c6{color:inherit;text-decoration:inherit}.c7{margin-left:36pt;padding-left:0pt}.c13{padding:0;margin:0}.c2{font-weight:700}.c12{height:11pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c14"><p class="c1"><span>Participants</span><span class="c0"><b></b>: Philippe Le Hegaret, Yoav Weiss, Philip Walton, Annie Sullivan, Steven Bougon, Andrew Comminos, Ryosuke Niwa</span></p><p class="c1 c12"><span class="c0"></span></p><p class="c1"><span class="c0"><b>Next call</b>: Feb 13th, 10am PST</span></p><h1 class="c10" id="h.pa52rhk5kptc"><span class="c8">isInputPending</span></h1><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: Continuing from last week. Talked about the security implications of differences between hit tests, and the approach different UAs take towards it</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Can’t we perform hit-testing once, or mandate that both hit tests match? Chrome security folks don’t think the information is highly-exploitable, but blocking the race condition sounds like a better option.</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: locking event to origin may leak information in itself, The frame that received the initial isInputPending and no event could infer the event was dispatched to another frame</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: That’s the leak in the current implementation. In the single hit-test case, you’d get the event even in case your iframe moved. In the other option, you’d get isInputPending but no event, in which case you know you have an event that was supposed to arrive, but someone moved your frame.</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: Is “event should have been dispatched?” cross-origin information that we don’t want to leak</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: The information “leaks” to same-origin in which the event should have been dispatched</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: depends on how you define “should have”</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Agree </span></p><p class="c1"><span>AI - discuss 3 options as part of a TAG review</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: discarding the event in case of a mismatch sounds risky.</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: changes hit testing expectations, so agree</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: what about doing hit testing once? That sounds low risk. If anything, improves the synchronization between user click and event. Seems preferable</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: now to spec changes.</span></p><p class="c1"><span class="c0">… Using DOM event types wasn’t ideal. </span></p><p class="c1"><span class="c0">Initially provided a list of DOM events, because we wanted to provide UAs a way to avoid continuous events (mouse move, etc).</span></p><p class="c1"><span class="c0">… That turned out hard to spec out, because implementations don’t really match and spec that,</span></p><p class="c1"><span class="c0">… Tried to solve this problem by picking the right set of events, which works other than a few edge cases</span></p><p class="c1"><span class="c0">… Primary objective was to focus on discrete events rather than continuous</span></p><p class="c1"><span class="c0">… So we need to define what is “continuous events”, and expect most users to not be interested, but want to continue to expose this information</span></p><p class="c1"><span class="c2">Philippe</span><span><b></b>: there’s work that the pointer events folks do on that front. Need to be aware of </span><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://w3c.github.io/pointerevents/%23dom-pointerevent-getcoalescedevents&amp;sa=D&amp;source=editors&amp;ust=1613234939935000&amp;usg=AOvVaw3YRr5vuV7ihDWMDTEwsK0b">getCoalescedEvents</a></span><span>/</span><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://w3c.github.io/pointerevents/%23dom-pointerevent-getpredictedevents&amp;sa=D&amp;source=editors&amp;ust=1613234939935000&amp;usg=AOvVaw1ZbZKke1lE6sEgpMpDJAwc">getPredictedEvents</a></span><span class="c0">&nbsp;In Pointer Events 3.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Also Event Timing</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: working with Nicolás and want to unify the definition between this and EventTiming.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: will also unify with other WG if makes sense</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: Moving on to IDL. IDL uses an Options struct which is more efficient to call this frequently. </span></p><p class="c1"><span class="c0">… The original implementation resulted in many string comparisons so it was expensive.</span></p><p class="c1"><span class="c0">… The idea is that if you want to track continuous events you add that as a boolean.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Makes sense.</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: why support continuous events at all?</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: use case could be a game that reacts to mouse moves. Won’t oppose shipping just UI events if that’s better.</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: definition of continuous events should be in HTML or UI events spec. Would be better to define it elsewhere. There could also be sub-categories (e.g. touch events, mouse events).</span></p><p class="c1"><span class="c2">Andrew</span><span class="c0"><b></b>: starting from a small set of options makes sense</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: also need to make sure it’s implementable so it's easier to start small.</span></p><p class="c1"><span class="c2">Philippe</span><span class="c0"><b></b>: sounds like there’s overlap with Pointer Events</span></p><p class="c1"><span class="c2">Andrew</span><span><b></b>: </span><span>will file an issue on GH to track that</span><span>&nbsp;(</span><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/WICG/is-input-pending/issues/24&amp;sa=D&amp;source=editors&amp;ust=1613234939937000&amp;usg=AOvVaw11XHT0IpzvhEYItwg-fMEt">https://github.com/WICG/is-input-pending/issues/24</a></span><span class="c0">)</span></p><h1 class="c10" id="h.itwf6ga6geq8"><span class="c8">Page Visibility and hidden</span></h1><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: There are many use cases where developers want a reliable signal that a user is about to leave the page (switching tabs, switching apps, etc). </span></p><p class="c1"><span class="c0">… There are a lot of situations where you’re trying to run some idle code, which is not urgent but needs to run before the user leaves. </span></p><p class="c1"><span class="c0">… Unload, pagehide and beforeunload are not reliable, especially on mobile. Visibility change has been *the* event to solve this for a while. </span></p><p class="c1"><span class="c0">… More recently I’ve been working with people at Google on that use case. But there are a bunch of issues in different OSes and the issue is around ambiguity in the spec, resulting in missed cases.</span></p><p class="c1"><span class="c0">… So the main cases are cases involving the tab and app switchers in mobile OSes. </span></p><p class="c1"><span class="c0">… As soon as the user moves to the switcher, they can dismiss the tab or app, and only firefox fires the event in this case. </span></p><p class="c1"><span class="c0">… On iOS, it’s not clear if firing the event is at all feasible.</span></p><p class="c1"><span class="c0">… So it would be easier to say that as soon as the user moves to the switcher, the page can be considered “in the background” and visibilitychange should fire.</span></p><p class="c1"><span class="c0">… But the spec says that if a part of the page is visible, the page is “visible”.</span></p><p class="c1"><span class="c0">Some questions:</span></p><ul class="c13 lst-kix_dse4f614g7zl-0 start"><li class="c1 c7 li-bullet-0"><span class="c0">Do we agree that in iOS, it’s not possible to fire the event after the user is in the switcher?</span></li><li class="c1 c7 li-bullet-0"><span class="c0">If so, can we change the spec to fire the event as soon as the user moved to the switcher?</span></li><li class="c1 c7 li-bullet-0"><span class="c0">Thoughts on definition change?</span></li></ul><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: Confused about the distinction between switching and closing in the switcher</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: Not sure what the distinction is, and why iOS does different things. I think that when the app is dismissed, Safari can’t run.</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: What is the difference in your testing between those cases?</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: Tested in iPhone X. swipe gesture from the bottom gives you the app switcher. Then a swipe sideways switches to a different tab, swipe up closes applications. </span></p><p class="c1"><span class="c0">… So switching app is swipe from bottom then swipe sideways to pick a different app. </span></p><p class="c1"><span class="c0">… Closing app is swipe from bottom then swipe up to close the Safari app. </span></p><p class="c1"><span class="c0">… So want to change the model to fire before entering the app switcher, not after taking an action there.</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: I think we know when we go into the app switcher, so probably possible to change.</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: I believe the blur event fires so there’s opportunity to fire an event.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: If we assume that it's feasible, would you agree with the definition? From my perspective, the main problem is the name “hidden”, but otherwise the page is hidden. All those switcher should trigger the hidden state.</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: On desktop, a browser could implement a UI that shows a screenshot of all tabs. But it’d be ridiculous to fire events for all those tabs in that case.</span></p><p class="c1"><span class="c2">Philippe</span><span class="c0"><b></b>: When you say screenshot, would a video on that page play?</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: No</span></p><p class="c1"><span class="c2">Philippe</span><span class="c0"><b></b>: So we’re not really seeing the viewport</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: I agree but need to clarify the spec. Also, do we want to change to “active”/”inactive”?</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Won’t be able to change the names for compat, but don’t think it’s a major source of confusion. So need to clarify the spec, and it probably won’t trip up a lot of people</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: Agree</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: Sounds reasonable, assuming it’s implementable. I agree that if rendering is not updated, it’s not “visible”. In Windows you could see the preview of apps, but wouldn’t consider it visible. Same in Safari’s “select tabs” view, but it’s just screenshots.</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: Anyone from Mozilla on the call? They would need to change their implementation if we change the definition, as they now fire the event after the tab switcher action happened.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Not on the call (between FOSSDEM and their all-hands). But we can tag them on the GH issue.</span></p><p class="c1"><span class="c0">Changing the spe sounds relatively easy, and then the question is how hard it would be for implementations to follow.</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: There was another issue where someone was complaining about information leak in the “hidden” state. We can clarify that “hidden” doesn’t mean that the user can’t see a screenshot</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: So we have agreement. Philip - would you be able to summarize the discussion on the issue?</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: Yup.</span></p><p class="c1 c12"><span class="c0"></span></p><h1 class="c10" id="h.3ang4xpshbwu"><span class="c8">Issue Triage</span></h1><h2 class="c11" id="h.tvg265kugkey"><span class="c5">Page Visibility</span></h2><p class="c1 c12"><span class="c0"></span></p><h3 class="c9" id="h.yem8wk938fmk"><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/page-visibility/issues/57&amp;sa=D&amp;source=editors&amp;ust=1613234939941000&amp;usg=AOvVaw1cA907D4IKyWjSgd_9rpYQ">Update spec so Bikeshed can automatically pick up linkable terms</a></span></h3><p class="c1"><span class="c2">Philippe</span><span><b></b>: Open PR on </span><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/page-visibility/pull/54&amp;sa=D&amp;source=editors&amp;ust=1613234939941000&amp;usg=AOvVaw04YUet-nplS0IGqHFH2ueD">54</a></span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Last comment from Marcos says “don’t merge yet”. Should we give it more time?</span></p><p class="c1"><span class="c2">Philippe</span><span class="c0"><b></b>: I’ll look into it</span></p><h3 class="c9" id="h.uxg7gmcejl6b"><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/page-visibility/issues/56&amp;sa=D&amp;source=editors&amp;ust=1613234939942000&amp;usg=AOvVaw0dWmZvcCCwmJfuRSYarIDI">Lack of clarity on how occlusion behavior interacts with iframes</a></span></h3><p class="c1"><span class="c2">Philippe</span><span class="c0"><b></b>: long standing issue - do we classify an iframe the same as its parent or not.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: So if the window is occluded and that covers an entire iframe, what should the iframe state be. </span></p><p class="c1"><span class="c0">… But before concluding what we should do, is this blocking? According to the current spec, iframes just inherit from their parent. So any occlusion behavior that does interact with iframes sounds like a feature request.</span></p><p class="c1"><span class="c2">Philippe</span><span class="c0"><b></b>: and in the past we said we won’t change that behavior. I’ll find a pointer to past-issues.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: In the meantime, we can set it as a feature request and bump it to L3. </span></p><p class="c1"><span class="c2">Philippe</span><span class="c0"><b></b>: I’d be surprised if we’d change behavior.</span></p><h2 class="c11" id="h.264aelpie8w4"><span class="c5">User Timing</span></h2><h3 class="c9" id="h.iy4cfz68rw42"><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/user-timing/issues/68&amp;sa=D&amp;source=editors&amp;ust=1613234939943000&amp;usg=AOvVaw37e1rgZ1tuH2_dgK5YAvyF">Allow marks and measures to be shown in developer tooling without adding it to the performance timeline</a></span></h3><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Using mark and measure in a tight loop results in performance costs.</span></p><p class="c1"><span class="c2">Annie</span><span class="c0"><b></b>: People also complained about the spamming of the perf timeline. Console.time and timeEnd are too constrained compared to User Timing L3</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Where is the console specified?</span></p><p class="c1"><span class="c2">Ryosuke</span><span><b></b>: </span><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://console.spec.whatwg.org/&amp;sa=D&amp;source=editors&amp;ust=1613234939943000&amp;usg=AOvVaw2wDSDjLYbyneQtbT4W1Iry">https://console.spec.whatwg.org/</a></span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: I would split the ask into 2 different parts</span></p><ol class="c13 lst-kix_2ap6y5ebuigb-0 start" start="1"><li class="c1 c7 li-bullet-0"><span class="c0">UT implementation in Chrome has too much overhead. Chrome should fix it</span></li><li class="c1 c7 li-bullet-0"><span class="c0">Console should enable all the things that UT enables</span></li></ol><p class="c1"><span class="c0">… But I don’t think we want a UT option to not fire user timing entries.</span></p><p class="c1"><span class="c2">Annie</span><span class="c0"><b></b>: They don’t want it in the console, but in the performance tab</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: still a developer tooling feature. The tab in which it shows up is UA dependent</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Tend to say that they should send a feature request for the console spec. Maybe they want a console function that doesn’t print to console, which is admittedly weird</span></p><p class="c1"><span class="c0">… Otherwise, the Chrome slowness is on me and I should fix it</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: The spamming is only a problem because some analytics vendors collect all the entries, and they should ask them to do the filtering.</span></p><p class="c1"><span class="c2">Yoav</span><span><b></b>: Yup. Andy Davies commented the same on the bug. Some RUM products support it. </span><span>I’ll sum it up on the issue</span><span class="c0">.</span></p><h2 class="c11" id="h.myzmi4ckjqcs"><span class="c5">requestIdleCallback</span></h2><h3 class="c9" id="h.pmk5b4pbc15a"><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/requestidlecallback/pull/88&amp;sa=D&amp;source=editors&amp;ust=1613234939945000&amp;usg=AOvVaw3JGsxDr1J8BFpXomEjWG--">Define algorithm for determining whether high priority work exists</a></span></h3><p class="c1"><span class="c2">Yoav</span><span><b></b>: Since Ryosuke won’t have time to review in the near future, we can look for other reviewers.</span><span class="c0">&nbsp;Boris, Anne and/or Domenic come to mind.</span></p><h2 class="c11" id="h.435svqyct7l2"><span class="c5">Resource Timing</span></h2><h3 class="c9" id="h.p6wm20u5cgei"><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/issues/215&amp;sa=D&amp;source=editors&amp;ust=1613234939945000&amp;usg=AOvVaw3gT67hVR3URVaLTxfNUZNl">The step to queue a task to run fire a buffer full event should specify its source</a></span></h3><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Can we use the “performance timeline task source”</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: Sure.</span></p><p class="c1"><span class="c2">Yoav</span><span>:</span><span>&nbsp;Assigning to myself</span></p><p class="c1 c12"><span class="c0"></span></p><h2 class="c11" id="h.bsc87rxxbpw4"><span class="c5">Page Visibility (again)</span></h2><h3 class="c9" id="h.qpsgtqy0a8j7"><span class="c3"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/page-visibility/issues/58&amp;sa=D&amp;source=editors&amp;ust=1613234939946000&amp;usg=AOvVaw3GfAzjmji_kXf_ue4PyJDP">Switching tabs in Safari for iOS still displays the elements that should be hidden</a></span></h3><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: After pageVisibility fires Safari never updates the rendering. </span></p><p class="c1"><span class="c0">… They are updating the DOM as part of the pageVisibility event to hide sensitive information. … But the rendering will never get updated.</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Maybe the first step would be to clarify what they meant on the issue. How does page visibility related to rendering opportunities?</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: Switching tabs fires the event, but rendering is not updated. Question to the WG: Is there an expectation in the spec that rendering will happen?</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: “hidden” state doesn’t mean the user can’t see the page, and is not a security feature.</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: Banking app can want to hide the content when going to the app switcher. </span></p><p class="c1"><span class="c0">… When the app is inactive, they want to hide that content. </span></p><p class="c1"><span class="c0">… Does the spec have that expectation right now? </span></p><p class="c1"><span class="c0">… It’s not implementable in Safari</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: doesn’t seem like it’s in violation of the spec. We need to clarify that to set expectations.</span></p><p class="c1"><span class="c2">Ryosuke</span><span class="c0"><b></b>: can add a note saying that there can not be rendering opportunities after the event runs.</span></p><p class="c1"><span class="c2">Philip</span><span class="c0"><b></b>: We could clarify that when updating the definition of hidden: updates to rendering may not fire until the page becomes visible again</span></p><p class="c1"><span class="c2">Yoav</span><span class="c0"><b></b>: Makes sense, don’t think we want to provide guarantees that the page is “hidden from view” and gets rendering updates.</span></p><p class="c1"><span class="c0">AI - Philip to sum up #58 as well.</span></p><p class="c1"><span class="c0">&nbsp;</span></p></div></div><div id="footer"><span>Published by <a target="_blank" title="Learn more about Google Drive" href="https://docs.google.com/">Google Drive</a></span><span class="dash">–</span><a href="https://docs.google.com/u/0/abuse?id=AKkXjowQhtme8HKPtlxyFKyfqaK-aQpOM1YjBan3DKdbQ-4742Nn5IuLOGJ49_E9E-TqvDBYoQgkQVSW-GmnSSM:0">Report Abuse</a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function da(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}var ea="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},fa;
if("function"==typeof Object.setPrototypeOf)fa=Object.setPrototypeOf;else{var ha;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;ha=ja.a;break a}catch(a){}ha=!1}fa=ha?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=fa;
function h(a,b){a.prototype=ea(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.o=b.prototype}da("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var l=this||self;function la(){}function ma(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function na(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function oa(a,b){function c(){}c.prototype=b.prototype;a.o=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.B=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}}function pa(a){return a};var qa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function ra(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var m;function p(a,b){this.i=a===sa&&b||"";this.j=ta}p.prototype.h=!0;p.prototype.g=function(){return this.i};var ta={},sa={};var ua=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]},va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,Ba=/[\x00&<>"']/;function Ca(a,b){return a<b?-1:a>b?1:0};function q(a,b){this.i=b===r?a:""}q.prototype.h=!0;q.prototype.g=function(){return this.i.toString()};q.prototype.toString=function(){return this.i.toString()};function u(a){return a instanceof q&&a.constructor===q?a.i:"type_error:SafeUrl"}
var Da=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Ea=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Fa=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Ga(a){if(a instanceof q)return a;a="object"==typeof a&&a.h?a.g():String(a);Fa.test(a)||(a="about:invalid#zClosurez");return new q(a,r)}
var r={},Ha=new q("about:invalid#zClosurez",r);var v;a:{var Ia=l.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){v=Ja;break a}}v=""}function w(a){return-1!=v.indexOf(a)};function x(a,b,c){this.i=c===Ka?a:""}x.prototype.h=!0;x.prototype.g=function(){return this.i.toString()};x.prototype.toString=function(){return this.i.toString()};var Ka={};function La(a,b,c,d){a=a instanceof q?a:Ga(a);b=b||l;c=c instanceof p?c instanceof p&&c.constructor===p&&c.j===ta?c.i:"type_error:Const":c||"";return void 0!==d?b.open(u(a),c,d,void 0):b.open(u(a),c)};function Ma(a){Ma[" "](a);return a}Ma[" "]=la;function y(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};var Na=w("Opera"),z=w("Trident")||w("MSIE"),Oa=w("Edge"),Pa=Oa||z,Qa=w("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"))&&!(w("Trident")||w("MSIE"))&&!w("Edge"),Ra=-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"),Sa=w("Macintosh");function Ta(){var a=l.document;return a?a.documentMode:void 0}var Ua;
a:{var Va="",Wa=function(){var a=v;if(Qa)return/rv:([^\);]+)(\)|;)/.exec(a);if(Oa)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ra)return/WebKit\/(\S+)/.exec(a);if(Na)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Wa&&(Va=Wa?Wa[1]:"");if(z){var Xa=Ta();if(null!=Xa&&Xa>parseFloat(Va)){Ua=String(Xa);break a}}Ua=Va}var Ya=Ua,Za={},$a;if(l.document&&z){var ab=Ta();$a=ab?ab:parseInt(Ya,10)||void 0}else $a=void 0;var bb=$a;function cb(a){return y(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++db}}})}var db=1E3;function A(){}A.prototype.u=function(){return this.j||(Object.defineProperties(this,{j:{value:++eb,enumerable:!1}}),this.j)};A.prototype.toString=function(){var a=B(fb(gb(this.constructor)))+"@";var b=(this.u()>>>0).toString(16);return a+B(b)};function D(){}h(D,A);D.prototype.i=function(a){this.h=a;if(a instanceof Object)try{a.A=this}catch(b){}};function hb(a){a.h instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.h):a.h.stack=Error().stack)}D.prototype.toString=function(){var a=fb(gb(this.constructor)),b=this.l;return null==b?a:B(a)+": "+B(b)};function ib(){}h(ib,D);function jb(){}h(jb,ib);var eb=0;function E(){}h(E,jb);E.prototype.i=function(a){jb.prototype.i.call(this,Object.is(this.g,"__noinit__")?a:this.g)};function kb(){}h(kb,E);function lb(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(a){return null==a?"null":a.toString()}function mb(a){return 65536<=a?B(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+B(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function nb(a,b){var c=b,d=a.length,e;b=lb(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=lb(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function ob(a,b){this.h=a;this.g=b}h(ob,A);function fb(a){var b=cb(a.h);0!=a.g&&(b="L"+B(b)+";");a=a.g;for(var c="",d=0;d<a;d=d+1|0)c=B(c)+"[";return B(c)+B(b)}ob.prototype.toString=function(){return"class "+B(fb(this))};function gb(a){var b=0;return y(a.prototype,"$$class/"+b,function(){return new ob(a,b)})};function pb(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var qb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function rb(a){a=qb.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function sb(a,b){var c=a.indexOf(mb(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=nb(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=nb(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(mb(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=B(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+B(c.substr(e))):
(d=B(c.substr(0,b|0)),e=b=b+1|0,c=d+B(c.substr(e)));a=a.replace(/\+/g,c);return pb(a,!1)};function F(a,b){this.h=b;for(var c=[],d=!0,e=a.length-1;0<=e;e--){var f=a[e]|0;d&&f==b||(c[e]=f,d=!1)}this.g=c}var tb={};function ub(a){return-128<=a&&128>a?y(tb,a,function(b){return new F([b|0],0>b?-1:0)}):new F([a|0],0>a?-1:0)}function G(a){if(isNaN(a)||!isFinite(a))return H;if(0>a)return I(G(-a));for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=4294967296;return new F(b,0)}var H=ub(0),J=ub(1),vb=ub(16777216);
function K(a){if(-1==a.h)return-K(I(a));for(var b=0,c=1,d=0;d<a.g.length;d++){var e=L(a,d);b+=(0<=e?e:4294967296+e)*c;c*=4294967296}return b}F.prototype.toString=function(a){a=a||10;if(2>a||36<a)throw Error("radix out of range: "+a);if(M(this))return"0";if(-1==this.h)return"-"+I(this).toString(a);for(var b=G(Math.pow(a,6)),c=this,d="";;){var e=wb(c,b).g;c=N(c,O(e,b));var f=((0<c.g.length?c.g[0]:c.h)>>>0).toString(a);c=e;if(M(c))return f+d;for(;6>f.length;)f="0"+f;d=f+d}};
function L(a,b){return 0>b?0:b<a.g.length?a.g[b]:a.h}function M(a){if(0!=a.h)return!1;for(var b=0;b<a.g.length;b++)if(0!=a.g[b])return!1;return!0}function P(a,b){a=N(a,b);return-1==a.h?-1:M(a)?0:1}function I(a){for(var b=a.g.length,c=[],d=0;d<b;d++)c[d]=~a.g[d];return(new F(c,~a.h)).add(J)}F.prototype.abs=function(){return-1==this.h?I(this):this};
F.prototype.add=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0,e=0;e<=b;e++){var f=d+(L(this,e)&65535)+(L(a,e)&65535),g=(f>>>16)+(L(this,e)>>>16)+(L(a,e)>>>16);d=g>>>16;f&=65535;g&=65535;c[e]=g<<16|f}return new F(c,c[c.length-1]&-2147483648?-1:0)};function N(a,b){return a.add(I(b))}
function O(a,b){if(M(a)||M(b))return H;if(-1==a.h)return-1==b.h?O(I(a),I(b)):I(O(I(a),b));if(-1==b.h)return I(O(a,I(b)));if(0>P(a,vb)&&0>P(b,vb))return G(K(a)*K(b));for(var c=a.g.length+b.g.length,d=[],e=0;e<2*c;e++)d[e]=0;for(e=0;e<a.g.length;e++)for(var f=0;f<b.g.length;f++){var g=L(a,e)>>>16,k=L(a,e)&65535,t=L(b,f)>>>16,n=L(b,f)&65535;d[2*e+2*f]+=k*n;Q(d,2*e+2*f);d[2*e+2*f+1]+=g*n;Q(d,2*e+2*f+1);d[2*e+2*f+1]+=k*t;Q(d,2*e+2*f+1);d[2*e+2*f+2]+=g*t;Q(d,2*e+2*f+2)}for(e=0;e<c;e++)d[e]=d[2*e+1]<<16|
d[2*e];for(e=c;e<2*c;e++)d[e]=0;return new F(d,0)}function Q(a,b){for(;(a[b]&65535)!=a[b];)a[b+1]+=a[b]>>>16,a[b]&=65535,b++}function S(a,b){this.g=a;this.h=b}
function wb(a,b){if(M(b))throw Error("division by zero");if(M(a))return new S(H,H);if(-1==a.h)return b=wb(I(a),b),new S(I(b.g),I(b.h));if(-1==b.h)return b=wb(a,I(b)),new S(I(b.g),b.h);if(30<a.g.length){if(-1==a.h||-1==b.h)throw Error("slowDivide_ only works with positive integers.");for(var c=J,d=b;0>=P(d,a);)c=xb(c,1),d=xb(d,1);var e=T(c,1),f=T(d,1);d=T(d,2);for(c=T(c,2);!M(d);){var g=f.add(d);0>=P(g,a)&&(e=e.add(c),f=g);d=T(d,1);c=T(c,1)}b=N(a,O(e,b));return new S(e,b)}for(e=H;0<=P(a,b);){c=Math.max(1,
Math.floor(K(a)/K(b)));d=Math.ceil(Math.log(c)/Math.LN2);d=48>=d?1:Math.pow(2,d-48);f=G(c);for(g=O(f,b);-1==g.h||0<P(g,a);)c-=d,f=G(c),g=O(f,b);M(f)&&(f=J);e=e.add(f);a=N(a,g)}return new S(e,a)}F.prototype.and=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)&L(a,d);return new F(c,this.h&a.h)};F.prototype.or=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)|L(a,d);return new F(c,this.h|a.h)};
F.prototype.xor=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)^L(a,d);return new F(c,this.h^a.h)};function xb(a,b){var c=b>>5;b%=32;for(var d=a.g.length+c+(0<b?1:0),e=[],f=0;f<d;f++)e[f]=0<b?L(a,f-c)<<b|L(a,f-c-1)>>>32-b:L(a,f-c);return new F(e,a.h)}function T(a,b){var c=b>>5;b%=32;for(var d=a.g.length-c,e=[],f=0;f<d;f++)e[f]=0<b?L(a,f+c)>>>b|L(a,f+c+1)<<32-b:L(a,f+c);return new F(e,a.h)};N(xb(J,32),J);N(xb(J,128),J);function yb(a){a&&"function"==typeof a.v&&a.v()};function U(){this.h=this.h;this.g=this.g}U.prototype.h=!1;U.prototype.v=function(){this.h||(this.h=!0,this.j())};U.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var zb=!z||9<=Number(bb),Ab=!z||9<=Number(bb),Bb=z&&!y(Za,"9",function(){for(var a=0,b=ua(String(Ya)).split("."),c=ua("9").split("."),d=Math.max(b.length,c.length),e=0;0==a&&e<d;e++){var f=b[e]||"",g=c[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;a=Ca(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Ca(0==f[2].length,0==g[2].length)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(0==a)}return 0<=a}),
Cb=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{l.addEventListener("test",la,b),l.removeEventListener("test",la,b)}catch(c){}return a}();function Db(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=!1}Db.prototype.h=function(){this.defaultPrevented=!0};function V(a,b){Db.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Qa){a:{try{Ma(b.nodeName);var e=!0;break a}catch(f){}e=
!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=
a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:Eb[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&V.o.h.call(this)}}oa(V,Db);var Fb=[1,4,2],Eb={2:"touch",3:"pen",4:"mouse"};V.prototype.h=function(){V.o.h.call(this);var a=this.i;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Bb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var Gb="closure_listenable_"+(1E6*Math.random()|0);var Hb=0;function Ib(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.h=e;this.key=++Hb;this.m=this.s=!1}function Jb(a){a.m=!0;a.listener=null;a.g=null;a.src=null;a.h=null};function Kb(a){this.src=a;this.g={};this.h=0}Kb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var k=a[g];if(!k.m&&k.listener==b&&k.capture==!!d&&k.h==e)break a}g=-1}-1<g?(b=a[g],c||(b.s=!1)):(b=new Ib(b,this.src,f,!!d,e),b.s=c,a.push(b));return b};function Lb(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=qa(d,b),f;(f=0<=e)&&Array.prototype.splice.call(d,e,1);f&&(Jb(b),0==a.g[c].length&&(delete a.g[c],a.h--))}};var Mb="closure_lm_"+(1E6*Math.random()|0),Nb={},Ob=0;function Pb(a,b,c,d,e){if(d&&d.once)return Qb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)Pb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!1,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!1,d,e)}
function Sb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=ma(e)?!!e.capture:!!e,k=Tb(a);k||(a[Mb]=k=new Kb(a));c=k.add(b,c,d,g,f);if(c.g)return c;d=Ub();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)Cb||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Vb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");Ob++;return c}
function Ub(){var a=Wb,b=Ab?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function Qb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)Qb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!0,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!0,d,e)}
function Xb(a){if("number"!==typeof a&&a&&!a.m){var b=a.src;if(b&&b[Gb])Lb(b.g,a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Vb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);Ob--;(c=Tb(b))?(Lb(c,a),0==c.h&&(c.src=null,b[Mb]=null)):Jb(a)}}}function Vb(a){return a in Nb?Nb[a]:Nb[a]="on"+a}
function Yb(a,b,c,d){var e=!0;if(a=Tb(a))if(b=a.g[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.m&&(f=Zb(f,d),e=e&&!1!==f)}return e}function Zb(a,b){var c=a.listener,d=a.h||a.src;a.s&&Xb(a);return c.call(d,b)}
function Wb(a,b){if(a.m)return!0;if(!Ab){if(!b)a:{b=["window","event"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new V(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.g;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.g=d[e];var f=Yb(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.g=d[e],f=Yb(d[e],a,!1,b),c=c&&f}return c}return Zb(a,
new V(b,this))}function Tb(a){a=a[Mb];return a instanceof Kb?a:null}var $b="__closure_events_fn_"+(1E9*Math.random()>>>0);function Rb(a){if("function"===typeof a)return a;a[$b]||(a[$b]=function(b){return a.handleEvent(b)});return a[$b]};function W(a){U.call(this);this.l=a;this.i={}}oa(W,U);var ac=[];function bc(a){ra(a.i,function(b,c){this.i.hasOwnProperty(c)&&Xb(b)},a);a.i={}}W.prototype.j=function(){W.o.j.call(this);bc(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function cc(a){U.call(this);this.i=a||document.body;this.l=new W(this);a=na(yb,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;var b=this.i,c=this.u,d="click";Array.isArray(d)||(d&&(ac[0]=d.toString()),d=ac);for(var e=0;e<d.length;e++){var f=Pb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}h(cc,U);
cc.prototype.u=function(a){if(!(!(zb?0==a.i.button:"click"==a.type||a.i.button&Fb[0])||Sa&&a.ctrlKey||a.defaultPrevented))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=c;try{var e=rb(c)[3];var f;if(f="www.google.com"===pb(e,!0)){var g=rb(c)[5];f="/url"===pb(g,!0)}if(f){var k=sb(c,"q");d=k?k:sb(c,"url")}}catch(C){a:{var t=C;if(null!=t){var n=t.A;if(null!=n){C=n;break a}}if(t instanceof
TypeError){var R=n=new kb;R.l=B(t);hb(R);n.g="__noinit__";n.g=t;n.i(new TypeError(n));t=n}else R=n=new E,R.l=B(t),hb(R),n.g="__noinit__",n.g=t,n.i(Error(n)),t=n;C=t}if(!(C instanceof ib))throw C.h;}d=null!=d?d:"";if(c!=d){e=void 0;b={target:"_blank",noreferrer:!0};c=window;d instanceof q?f=d:(f="undefined"!=typeof d.href?d.href:String(d),f instanceof q||(f="object"==typeof f&&f.h?f.g():String(f),Fa.test(f)?f=new q(f,r):(f=String(f),f=f.replace(/(%0A|%0D)/g,""),f=(g=f.match(Ea))&&Da.test(g[1])?new q(f,
r):null)),f=f||Ha);d=b.target||d.target;g=[];for(e in b)switch(e){case "width":case "height":case "top":case "left":g.push(e+"="+b[e]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(e+"="+(b[e]?1:0))}e=g.join(",");if((w("iPhone")&&!w("iPod")&&!w("iPad")||w("iPad")||w("iPod"))&&c.navigator&&c.navigator.standalone&&d&&"_self"!=d)e="A",g=document,e=String(e),"application/xhtml+xml"===g.contentType&&(e=e.toLowerCase()),g=e=g.createElement(e),f=f instanceof q?f:Ga(f),g.href=
u(f),e.setAttribute("target",d),b.noreferrer&&e.setAttribute("rel","noreferrer"),b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,c,1),e.dispatchEvent(b);else if(b.noreferrer){if(c=La("",c,d,e),b=u(f),c){Pa&&-1!=b.indexOf(";")&&(b="'"+b.replace(/'/g,"%27")+"'");c.opener=null;Ba.test(b)&&(-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;")),-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;")),-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;")),-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;")),-1!=b.indexOf("'")&&
(b=b.replace(za,"&#39;")),-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;")));b='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+b+'">';if(void 0===m)if(d=null,(e=l.trustedTypes)&&e.createPolicy){try{d=e.createPolicy("goog#html",{createHTML:pa,createScript:pa,createScriptURL:pa})}catch(C){l.console&&l.console.error(C.message)}m=d}else m=d;b=(d=m)?d.createHTML(b):b;b=new x(b,null,Ka);(c=c.document)&&c.write&&(c.write(b instanceof x&&b.constructor===x?b.i:"type_error:SafeHtml"),
c.close())}}else(c=La(f,c,d,e))&&b.noopener&&(c.opener=null);a.h();break}}b=b.parentNode}};function dc(a){new cc(a)}var X=["DOCS_installLinkReferrerSanitizer"],Y=l;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===dc?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=dc;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer();</script></body></html>